package com.matrix.im.domain.repository;

import com.matrix.api.im.vo.ConversationVO;
import com.matrix.im.domain.model.ChatMessage;
import com.matrix.im.domain.model.Conversation;
import org.springframework.data.domain.Page;

/**
 * @author 有点甜
 * @since 2025/8/2
 */
public interface ConversationRepository {

    /**
     * 根据参与的两个用户ID查找会话,如果不存在则创建一个新的
     *
     * @param user1Id 用户1 ID
     * @param user2Id 用户2 ID
     * @return Conversation 聚合根
     */
    Conversation findOrCreateByUsers(Long user1Id, Long user2Id);

    /**
     * 保存会话聚合
     *
     * @param conversation 聚合根
     */
    void save(Conversation conversation);

    /**
     * 分页查询指定会话的聊天记录
     *
     * @param userId   当前用户ID
     * @param friendId 对方用户ID
     * @param pageNum  页码
     * @param pageSize 每页大小
     * @return 聊天消息分页结果
     */
    Page<ChatMessage> findChatMessages(Long userId, Long friendId, int pageNum, int pageSize);

    /**
     * 分页查询用户的会话列表
     *
     * @param userId   用户ID
     * @param pageNum  页码
     * @param pageSize 每页大小
     * @return 会话VO的分页结果
     */
    Page<ConversationVO> findConversationsByUserId(Long userId, int pageNum, int pageSize);

    /**
     * 获取用户的总未读数
     *
     * @param userId 用户ID
     * @return 总未读数
     */
    long getTotalUnreadCount(Long userId);
}
